algorithm_test = {
  'alg.adjacent_find': files('adjacent_find.cpp'),
  'alg.adjacent_remove_if': files('adjacent_remove_if.cpp'),
  'alg.all_of': files('all_of.cpp'),
  'alg.any_of': files('any_of.cpp'),
  'alg.none_of': files('none_of.cpp'),
  'alg.binary_search': files('binary_search.cpp'),
  'alg.contains': files('contains.cpp'),
  'alg.copy': files('copy.cpp'),
  'alg.copy_backward': files('copy_backward.cpp'),
  'alg.copy_if': files('copy_if.cpp'),
  'alg.count': files('count.cpp'),
  'alg.count_if': files('count_if.cpp'),
  'alg.ends_with': files('ends_with.cpp'),
  'alg.equal': files('equal.cpp'),
  'alg.equal_range': files('equal_range.cpp'),
  'alg.fill': files('fill.cpp'),
  'alg.find': files('find.cpp'),
  'alg.find_end': files('find_end.cpp'),
  'alg.find_if': files('find_if.cpp'),
  'alg.find_if_not': files('find_if_not.cpp'),
  'alg.find_first_of': files('find_first_of.cpp'),
  'alg.fold': files('fold.cpp'),
  'alg.for_each': files('for_each.cpp'),
  'alg.for_each_n': files('for_each_n.cpp'),
  'alg.generate': files('generate.cpp'),
  'alg.generate_n': files('generate_n.cpp'),
  'alg.includes': files('includes.cpp'),
  'alg.inplace_merge': files('inplace_merge.cpp'),
  'alg.is_heap1': files('is_heap1.cpp'),
  'alg.is_heap2': files('is_heap2.cpp'),
  'alg.is_heap3': files('is_heap3.cpp'),
  'alg.is_heap4': files('is_heap4.cpp'),
  'alg.is_heap_until1': files('is_heap_until1.cpp'),
  'alg.is_heap_until2': files('is_heap_until2.cpp'),
  'alg.is_heap_until3': files('is_heap_until3.cpp'),
  'alg.is_heap_until4': files('is_heap_until4.cpp'),
  'alg.is_partitioned': files('is_partitioned.cpp'),
  'alg.is_permutation': files('is_permutation.cpp'),
  'alg.is_sorted_until': files('is_sorted_until.cpp'),
  'alg.is_sorted': files('is_sorted.cpp'),
  'alg.lexicographical_compare': files('lexicographical_compare.cpp'),
  'alg.lower_bound': files('lower_bound.cpp'),
  'alg.make_heap': files('make_heap.cpp'),
  'alg.max': files('max.cpp'),
  'alg.max_element': files('max_element.cpp'),
  'alg.merge': files('merge.cpp'),
  'alg.min': files('min.cpp'),
  'alg.min_element': files('min_element.cpp'),
  'alg.minmax': files('minmax.cpp'),
  'alg.minmax_element': files('minmax_element.cpp'),
  'alg.mismatch': files('mismatch.cpp'),
  'alg.move': files('move.cpp'),
  'alg.move_backward': files('move_backward.cpp'),
  'alg.next_permutation': files('next_permutation.cpp'),
  'alg.nth_element': files('nth_element.cpp'),
  'alg.partial_sort': files('partial_sort.cpp'),
  'alg.partial_sort_copy': files('partial_sort_copy.cpp'),
  'alg.partition': files('partition.cpp'),
  'alg.partition_copy': files('partition_copy.cpp'),
  'alg.partition_point': files('partition_point.cpp'),
  'alg.pop_heap': files('pop_heap.cpp'),
  'alg.prev_permutation': files('prev_permutation.cpp'),
  'alg.push_heap': files('push_heap.cpp'),
  'alg.remove': files('remove.cpp'),
  'alg.remove_copy': files('remove_copy.cpp'),
  'alg.remove_copy_if': files('remove_copy_if.cpp'),
  'alg.remove_if': files('remove_if.cpp'),
  'alg.replace': files('replace.cpp'),
  'alg.replace_copy': files('replace_copy.cpp'),
  'alg.replace_copy_if': files('replace_copy_if.cpp'),
  'alg.replace_if': files('replace_if.cpp'),
  'alg.reverse': files('reverse.cpp'),
  'alg.reverse_copy': files('reverse_copy.cpp'),
  'alg.rotate': files('rotate.cpp'),
  'alg.rotate_copy': files('rotate_copy.cpp'),
  'alg.sample': files('sample.cpp'),
  'alg.search': files('search.cpp'),
  'alg.search_n': files('search_n.cpp'),
  'alg.set_difference1': files('set_difference1.cpp'),
  'alg.set_difference2': files('set_difference2.cpp'),
  'alg.set_difference3': files('set_difference3.cpp'),
  'alg.set_difference4': files('set_difference4.cpp'),
  'alg.set_difference5': files('set_difference5.cpp'),
  'alg.set_difference6': files('set_difference6.cpp'),
  'alg.set_intersection1': files('set_intersection1.cpp'),
  'alg.set_intersection2': files('set_intersection2.cpp'),
  'alg.set_intersection3': files('set_intersection3.cpp'),
  'alg.set_intersection4': files('set_intersection4.cpp'),
  'alg.set_intersection5': files('set_intersection5.cpp'),
  'alg.set_intersection6': files('set_intersection6.cpp'),
  'alg.set_symmetric_difference1': files('set_symmetric_difference1.cpp'),
  'alg.set_symmetric_difference2': files('set_symmetric_difference2.cpp'),
  'alg.set_symmetric_difference3': files('set_symmetric_difference3.cpp'),
  'alg.set_symmetric_difference4': files('set_symmetric_difference4.cpp'),
  'alg.set_symmetric_difference5': files('set_symmetric_difference5.cpp'),
  'alg.set_symmetric_difference6': files('set_symmetric_difference6.cpp'),
  'alg.set_union1': files('set_union1.cpp'),
  'alg.set_union2': files('set_union2.cpp'),
  'alg.set_union3': files('set_union3.cpp'),
  'alg.set_union4': files('set_union4.cpp'),
  'alg.set_union5': files('set_union5.cpp'),
  'alg.set_union6': files('set_union6.cpp'),
  'alg.shuffle': files('shuffle.cpp'),
  'alg.sort': files('sort.cpp'),
  'alg.sort_heap': files('sort_heap.cpp'),
  'alg.stable_partition': files('stable_partition.cpp'),
  'alg.stable_sort': files('stable_sort.cpp'),
  'alg.starts_with': files('starts_with.cpp'),
  'alg.swap_ranges': files('swap_ranges.cpp'),
  'alg.transform': files('transform.cpp'),
  'alg.unique': files('unique.cpp'),
  'alg.unique_copy': files('unique_copy.cpp'),
  'alg.unstable_remove_if': files('unstable_remove_if.cpp'),
  'alg.upper_bound': files('upper_bound.cpp'),
  'alg.sort_n_with_buffer': files('sort_n_with_buffer.cpp'),
}

foreach name, sources : algorithm_test
  exe = executable(
    'range.v3.test.@0@'.format(name),
    sources: sources,
    dependencies: range_dep,
  )
  test(name, exe)
endforeach
